package main

import (
	"fmt"
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
)

// 定义一个远程调用方法
type Hello struct {
}

// req 客户端请求数据
// res 返回客户端数据
func (this Hello) SayHello(req string, res *string) error {
	fmt.Println(req)
	*res = "你好" + req
	return nil
}

func main() {
	// 1.注册RPC服务
	err := rpc.RegisterName("hello", new(Hello))
	if err != nil {
		fmt.Println(err)
	}
	// 2.监听端口
	listener, err := net.Listen("tcp", "127.0.0.1:9000")
	if err != nil {
		fmt.Println(err)
	}
	// 3.应用退出关闭监听端口
	defer listener.Close()

	for {
		// 4.建立连接
		fmt.Println("开始建立连接")
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println(err)
			return
		}
		fmt.Println("连接建立成功")
		// 5.绑定服务
		// rpc.ServeConn(conn)
		rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
		fmt.Println("绑定服务成功")
	}
}
